package com.resou.reader.api.service;

import com.resou.reader.api.entry.CommonData;
import com.resou.reader.api.entry.MetMealBean;
import com.resou.reader.api.entry.MultiConfigBean;
import com.resou.reader.api.entry.PayConfigBean;
import com.resou.reader.api.entry.PayRecordBean;
import com.resou.reader.api.entry.PayResultBean;
import com.resou.reader.api.entry.PrivilegeBean;
import com.resou.reader.api.entry.Result;
import com.resou.reader.api.entry.ResultList;
import com.resou.reader.api.entry.UserInfoBean;
import com.resou.reader.api.entry.VIPConfigBean;
import com.resou.reader.api.entry.WXPayBean;
import com.resou.reader.data.vip.model.VipPrivilege;
import com.resou.reader.mine.paycenter.AliPay;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Created by ${Garrett} on 2018/10/24.
 * Contact me krouky@outlook.com
 */
public interface PayService {

    /**
     * 充值记录
     * page:当前页数,默认为0
     * size: 一页显示多少条,默认15条
     */
    @POST("pay/rechargeRecordlist")
    @FormUrlEncoded
    Observable<Result<CommonData<List<PayRecordBean>>>> rechargeRecordList(@Field("token") String token, @Field("page") int page, @Field("size") String size);

    /**
     * 充值价格配置 rechargePrice 已调通
     */
    @POST("pay/rechargePrice")
    Observable<Result<List<PayConfigBean>>> rechargePrice(@Header("token") String token);

    /**
     * 获取微信充值订单接口
     */
    @POST("pay/wxPayAndroid")
    @FormUrlEncoded
    Observable<Result<WXPayBean>> wxPayAndroid(@Field("token") String token, @Field("price") String price, @Field("title") String title, @Field("clientVerion") String clientVerion);

    /**
     * 获取微信充值订单接口
     */
    @POST("pay/wxPayAndroidVip")
    @FormUrlEncoded
    Observable<Result<WXPayBean>> wxVIPPayAndroid(@Field("token") String token,
                                                  @Field("price") String price, @Field("title") String title, @Field("clientVerion") String clientVerion, @Field("endTime") String endTime, @Field("coupon") String coupon);

//    /**
//     * 获取微信VIP充值订单接口
//     */
//    @POST("pay/wxPayAndroidVip")
//    @FormUrlEncoded
//    Observable<Result<WXPayBean>> wxVIPPayAndroid(@Field("token") String token,
//                                                  @Field("price") String price, @Field("title") String title, @Field("clientVerion") String clientVerion,
//                                                  @Field("endTime") String endTime);

    /**
     * 获取支付宝充值订单接口
     */
    @POST("pay/aliPayApp")
    @FormUrlEncoded
    Observable<AliPay> aliPayApp(@Header("token") String token, @Field("price") String price);

    /**
     * 获取支付宝充值订单接口
     */
    @POST("pay/aliPayVipApp")
    Observable<AliPay> aliPayVipApp(@Query("token") String token, @Query("price") String price,
                                    @Query("endTime") String endTime, @Query("coupon") String coupon);

    /**
     * vip价格配置vipPriceConfig 已调通
     */
    @GET("vip/vipPriceConfig")
    Observable<Result<List<VIPConfigBean>>> vipPriceConfig();

    @POST("pay/activity/buy")
    @FormUrlEncoded
    Observable<Result<PayResultBean>> activityChapterPay(@Header("token") String token, @Field("bookId") String bookId
            , @Field("bookName") String bookName, @Field("chapterId") String chapterId
            , @Field("chapterName") String chapterName, @Field("payCurrency") int payCurrency, @Field("payType") int payType);

    /**
     * 单章节付费接口
     *
     * @param token       登录返回的token
     * @param bookId      书唯一标识
     * @param bookName    书名
     * @param chapterId   章节id
     * @param chapterName 章节名
     * @param payCurrency 购买价格
     * @return 付费Bean
     */
    @POST("pay/chapter/buy")
    @FormUrlEncoded
    Observable<Result<PayResultBean>> singleChapterPay(@Header("token") String token, @Field("bookId") String bookId
            , @Field("bookName") String bookName, @Field("chapterId") String chapterId
            , @Field("chapterName") String chapterName, @Field("payCurrency") int payCurrency);


    @POST("pay/purchase/full")
    @FormUrlEncoded
    Observable<Result<PayResultBean>> allChapterPay(@Header("token") String token, @Field("bookId") String bookId
            , @Field("bookName") String bookName, @Field("chapterId") String chapterId, @Field("payCurrency") int payCurrency);

    /**
     * 获取多章节购买的配置
     *
     * @param token     登录返回的token
     * @param bookId    书唯一标识
     * @param chapterId 章节id
     * @return 多章节购买配置List
     */
    @POST("book/mutilconfig")
    @FormUrlEncoded
    Observable<Result<List<MultiConfigBean>>> multiConfigs(@Header("token") String token, @Field("bookId") String bookId, @Field("chapterId") String chapterId);

    /**
     * 多章节付费接口，调用前需先调用多章节付费配置接口获取后台价格配置
     *
     * @param token       登录返回的token
     * @param bookId      唯一标识
     * @param bookName    书名
     * @param chapterId   章节id
     * @param chapterName 章节名
     * @param payCurrency @see #multiConfigs接口返回的付费类型
     * @param payType     @see #multiConfigs接口返回的购买类型
     * @return 余额
     * @see #multiConfigs(String, String, String)
     */
    @POST("pay/multichapter/buy")
    @FormUrlEncoded
    Observable<Result<PayResultBean>> multiChapterPay(@Header("token") String token, @Field("bookId") String bookId
            , @Field("bookName") String bookName, @Field("chapterId") String chapterId
            , @Field("chapterName") String chapterName, @Field("payCurrency") int payCurrency
            , @Field("payType") int payType);


//    /**
//     * 会员中心套餐获取
//     *
//     * @param token
//     * @return
//     */
//    @GET("vip/vipPriceConfig")
//    Observable<ResultList<MetMealBean>> quearCoupon(@Header("token") String token);

    /**
     * 会员中心特权列表及套餐列表
     *
     * @param token
     * @return
     */
    @POST("vippackage/message")
    Observable<Result<VipPrivilege>> quearPrivilege(@Header("token") String token);


    /**
     * 保存VIP充值记录
     *
     * @param token
     * @return
     */
    @GET("vip/saveVipPaylog")
    Observable<Result<String>> saveVIPRecord(@Query("token") String token);

    /**
     * 查询VIP充值记录
     *
     * @param token
     * @return
     */
    @GET("vip/querVipLog")
    Observable<Result<CommonData<List<PayRecordBean>>>> quearVIPRecord(@Query("token") String token);


}
